#!/usr/bin/env python
# encoding: utf-8

# @Author  : vfengcc
# @File    : fn.py
# @Time    : 2019/12/22 10:45

# 计算一个数字(非负整数)的阶乘。函数接受数字作为参数
def factorial(number: int):
    if number < 0 or not isinstance(number, int):
        raise ValueError('非负整数')

    # for循环计算
    re = 1
    for i in range(1, number + 1):
        re *= i
    return re

    # 递归有层次限制 超过会抛异常
    # if num < 2:
    #     return 1
    # else:
    #     return factorial(num - 1) * num


# 将一个数字作为参数，并检查该数字是否为素数(返回True or False)
def is_primenumber(number: int):
    if number == 2:
        return True
    if number > 2 and number % 2 != 0:  # 大于2 奇数
        for j in range(2, int(number ** 0.5) + 1):
            if number % j == 0:  # 合数
                return False
        else:
            return True
    else:
        return False


# 检查传递的字符串是否回文
def is_palindromic(string):
    _str = str(string)
    for i in range(len(_str)):
        if _str[i] != _str[-i - 1]:
            return False
    else:
        return True


if __name__ == '__main__':
    print('***一、测试阶乘***')
    for i in [1, ]:
        print('{} 的阶乘={}'.format(i, factorial(i)))
    print()

    print('***二、测试是否为素数***')
    for i in [0, 1, 2, 5, 8, 19]:
        print('{}\t{}素数'.format(i, '是' if is_primenumber(i) else '不是'))
    print()

    print('***三、测试是否为回文字符串***')
    for i in ['abcdcba', 123321, 'abbed', '中国中']:
        print('{}\t{}回文'.format(i, '是' if is_palindromic(i) else '不是'))
    print()
    # return 用的很溜啊